package br.unisinos.pdm.bluetooth;

import br.unisinos.pdm.GameCanvas;
import java.io.*;
import javax.microedition.io.*;


public class BluetoothConnection {
    
    public static final int OK = 2;
    public static final int GAMEOVER = 4;
    public static final int GAMEOVER_REPLY = 8;
    public static final int RESTART = 16;
    
    private GameCanvas gameCanvas;
    private boolean running;
    
    private DataInputStream is;
    private DataOutputStream os;
    
    public BluetoothConnection(GameCanvas gameCanvas){
        this.gameCanvas = gameCanvas;
    }
    
    public void send(String msg){
        try{
            if(os != null){
                os.writeUTF(msg);
                os.flush();
            }
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }
    
    public void execute(StreamConnection connection) throws IOException{

        try{

            gameCanvas.iniciaJogo();

            running = true;
            
            os = connection.openDataOutputStream();
            is = connection.openDataInputStream();
            
            gameCanvas.init(this);
            
            while(running){

                //aguarda mensagem
                String msg = is.readUTF();
                //System.out.println(msg);
                
                //verifica o tipo de mensagem
                String tipoComando = msg.substring(0,msg.indexOf("::"));
                String comando = msg.substring(msg.indexOf("::")+2);
                //sincroniza a posicao da bola
                if (tipoComando.equals("BOLA")) {
                    int bolaX = Integer.parseInt(comando.substring(0,comando.indexOf("||")));
                    int bolaY = Integer.parseInt(comando.substring(comando.indexOf("||")+2));
                    gameCanvas.setaPosicaoBola(bolaX, bolaY);
                }

                //sincroniza o jogador 1 (server)
                if (tipoComando.equals("JOGADOR1")) {
                    gameCanvas.setPosicaoJogador1(Integer.parseInt(comando));
                }

                //sincroniza o jogador 2 (client)
                if (tipoComando.equals("JOGADOR2")) {
                    gameCanvas.setPosicaoJogador2(Integer.parseInt(comando));
                }

                //sincroniza os pontos do jogador 2 (client)
                if (tipoComando.equals("PONTOSJOGADOR2")) {
                    gameCanvas.setPontosJogador2(Integer.parseInt(comando));
                }

                //sincroniza os pontos do jogador 1 (client)
                if (tipoComando.equals("PONTOSJOGADOR1")) {
                    gameCanvas.setPontosJogador1(Integer.parseInt(comando));
                }
            }
        }finally{
            if(os != null) os.close();
            if(is != null) is.close();
        }
    }
       
    public void accept(){}
    
    public void connect(){}
    
    public void cancel(){}
}
